# 查询参数：既有在URL里的，也有 body 里的，引入 pydantic 可以更专业的对参数进行校验转换以及 IDE 提示补全

from fastapi import FastAPI
from pydantic import BaseModel


class Item(BaseModel):
    name: str
    description: str | None = None
    price: float
    tax: float | None = None


app = FastAPI()


# 既有 URL 参数，也有 body 参数，各自怎么设置和获取？ 'http://127.0.0.1:8000/items/111?q=222'
@app.put("/items/{item_id}")
async def update_item(
        item_id: int,  # item_id 是在路径里的
        item: Item,  # item 是 pydantic 来校验转换的
        q: str | None = None):
    result = {
        "item_id": item_id,
        "item": item.model_dump(),  # **item.dict() 已经过时了
    }
    if q:
        result.update({"q": q})
    return result
